package com.xiangxiao.rpan.storage.fastdfs;


import com.github.tobato.fastdfs.domain.fdfs.GroupState;
import com.github.tobato.fastdfs.domain.fdfs.StorageNode;
import com.github.tobato.fastdfs.domain.fdfs.StorageNodeInfo;
import com.github.tobato.fastdfs.domain.fdfs.StorageState;
import com.github.tobato.fastdfs.service.TrackerClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
/**
 * @auther xiangxiao
 * @email 573768011@qq.com
 * @data 2023/8/18 15:39
 */
@Component
public class FastTrackerClientWrapper {
  @Autowired
  private TrackerClient trackerClient;

  /**
   * 获取存储节点 get the StoreStorage Client
   *
   * @return StorageNode 向tracker请求上传、下载文件或其他文件请求时，tracker返回的文件storage节点的信息
   */
  public StorageNode getStoreStorage() {
    return trackerClient.getStoreStorage();
  }

  /**
   * 按组获取存储节点 get the StoreStorage Client by group
   *
   * @param groupName 组名
   * @return StorageNode 向tracker请求上传、下载文件或其他文件请求时，tracker返回的文件storage节点的信息
   */
  public StorageNode getStoreStorage(String groupName) {
    return trackerClient.getStoreStorage(groupName);
  }

  /**
   * 获取读取存储节点 get the fetchStorage Client by group and filename
   *
   * @param groupName 组名
   * @param filename  文件名
   * @return StorageNodeInfo 向tracker请求上传、下载文件或其他文件请求时，tracker返回的文件storage节点的信息
   */
  public StorageNodeInfo getFetchStorage(String groupName, String filename) {
    return trackerClient.getFetchStorage(groupName, filename);
  }

  /**
   * 获取更新节点 get the updateStorage Client by group and filename
   *
   * @param groupName 组名
   * @param filename  文件名
   * @return StorageNodeInfo 向tracker请求上传、下载文件或其他文件请求时，tracker返回的文件storage节点的信息
   */
  public StorageNodeInfo getUpdateStorage(String groupName, String filename) {
    return trackerClient.getUpdateStorage(groupName, filename);
  }

  /**
   * 获取组状态list groups
   *
   * @return fastdfs中group的状态信息列表
   */
  public List<GroupState> listGroups() {
    return trackerClient.listGroups();
  }

  /**
   * 按组名获取存储节点状态list storages by groupName
   *
   * @param groupName 组名
   * @return fastdfs中storage节点的状态信息列表
   */
  public List<StorageState> listStorages(String groupName) {
    return trackerClient.listStorages(groupName);
  }

  /**
   * 获取存储状态 list storages by groupName and storageIpAddr
   *
   * @param groupName     组名
   * @param storageIpAddr ip地址
   * @return fastdfs中storage节点的状态信息列表
   */
  public List<StorageState> listStorages(String groupName, String storageIpAddr) {
    return trackerClient.listStorages(groupName, storageIpAddr);

  }

  /**
   * 删除存储节点 delete storage from TrackerServer
   *
   * @param groupName     组名
   * @param storageIpAddr ip地址
   */
  void deleteStorage(String groupName, String storageIpAddr) {
    trackerClient.deleteStorage(groupName, storageIpAddr);
  }
}
